package cn.da.shuai.cool.finance.service;

import cn.da.shuai.cool.finance.model.CoolGeneralLedger;
import cn.da.shuai.cool.mybatis.service.ICoolService;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 总账表 服务类
 * </p>
 *
 * @author 大帅哥
 * @since 2023-05-01
 */
public interface ICoolGeneralLedgerService extends ICoolService<CoolGeneralLedger> {

    /**
     * 过账操作
     * @param ledger 总账记录
     * @return 过账结果
     */
    boolean postTransaction(CoolGeneralLedger ledger);

    /**
     * 期末结账
     * @param periodEndDate 结账日期
     * @return 结账结果
     */
    boolean closePeriod(LocalDate periodEndDate);

    /**
     * 获取科目余额
     * @param accountCode 科目编码
     * @param date 日期
     * @return 科目余额
     */
    BigDecimal getAccountBalance(String accountCode, LocalDate date);

    /**
     * 获取科目余额表
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 科目余额表
     */
    List<Map<String, Object>> getTrialBalance(LocalDate startDate, LocalDate endDate);

    /**
     * 生成会计报表
     * @param reportDate 报表日期
     * @param reportType 报表类型（资产负债表、利润表等）
     * @return 报表数据
     */
    Map<String, Object> generateFinancialReport(LocalDate reportDate, String reportType);

    /**
     * 冲销会计分录
     * @param originalVoucherNo 原始凭证号
     * @return 冲销结果
     */
    boolean reverseEntry(String originalVoucherNo);

    /**
     * 检查会计分录是否平衡
     * @param ledger 总账记录
     * @return 是否平衡
     */
    boolean checkAccountingBalance(CoolGeneralLedger ledger);
}